kernel: bump 6.12 to 6.12.62
authorJohn Audia <[email protected]>
Wed, 10 Dec 2025 20:19:42 +0000 (15:19 -0500)
committerHauke Mehrtens <[email protected]>
Tue, 16 Dec 2025 23:27:21 +0000 (00:27 +0100)
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.62

Manually rebased:
  bcm27xx/patches-6.12/950-0358-mmc-sdhci-of-dwcmshc-define-sdio-timeout-clocks.patch

Removed upstreamed:
  backport-6.12/830-v6.18-spi-bcm63xx-fix-premature-CS-deassertion-on-RX-only-transactions.patch[1]

All other patches automatically rebased.

1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.62&id=e31194bf494f6900a5f96f55ed194a00e458f8d1

Build system: x86/64
Build-tested: flogic/glinet_gl-mt6000, ramips/tplink_archer-a6-v3, x86/64-glibc
Run-tested: flogic/glinet_gl-mt6000, ramips/tplink_archer-a6-v3, x86/64-glibc

Signed-off-by: John Audia <[email protected]>
Link: https://github.com/openwrt/openwrt/pull/21126
Signed-off-by: Hauke Mehrtens <[email protected]>
32 files changed:
target/linux/airoha/patches-6.12/220-05-dt-bindings-phy-Add-documentation-for-Airoha-AN7581-.patch
target/linux/airoha/patches-6.12/220-07-phy-airoha-Add-support-for-Airoha-AN7581-USB-PHY.patch
target/linux/airoha/patches-6.12/901-snand-mtk-bmt-support.patch
target/linux/bcm27xx/patches-6.12/950-0073-ASoC-Add-support-for-all-the-downstream-rpi-sound-ca.patch
target/linux/bcm27xx/patches-6.12/950-0125-xhci-implement-xhci_fixup_endpoint-for-interval-adju.patch
target/linux/bcm27xx/patches-6.12/950-0132-hid-usb-Add-device-quirks-for-Freeway-Airmouse-T3-an.patch
target/linux/bcm27xx/patches-6.12/950-0335-usb-xhci-add-XHCI_VLI_HUB_TT_QUIRK.patch
target/linux/bcm27xx/patches-6.12/950-0344-sdhci-Add-SD-Express-hook.patch
target/linux/bcm27xx/patches-6.12/950-0348-usb-dwc3-Set-DMA-and-coherent-masks-early.patch
target/linux/bcm27xx/patches-6.12/950-0358-mmc-sdhci-of-dwcmshc-define-sdio-timeout-clocks.patch
target/linux/bcm27xx/patches-6.12/950-0393-drm-fb-helper-Look-up-preferred-fbdev-node-number-fr.patch
target/linux/bcm27xx/patches-6.12/950-0413-drivers-usb-dwc3-add-FS-LS-bus-instance-parkmode-dis.patch
target/linux/bcm27xx/patches-6.12/950-0524-usb-dwc3-core-add-support-for-setting-NAK-enhancemen.patch
target/linux/bcm27xx/patches-6.12/950-0947-fixup-mmc-sdhci-of-dwcmshc-define-sdio-timeout-clock.patch
target/linux/bcm27xx/patches-6.12/950-0950-usb-xhci-default-to-Intel-scheme-for-calculating-U1-.patch
target/linux/econet/patches-6.12/901-nand-enable-en75-bbt.patch
target/linux/econet/patches-6.12/902-snand-mtk-bmt-support.patch
target/linux/generic/backport-6.12/830-v6.18-spi-bcm63xx-fix-premature-CS-deassertion-on-RX-only-transactions.patch [deleted file]
target/linux/generic/kernel-6.12
target/linux/generic/pending-6.12/510-block-add-uImage.FIT-subimage-block-driver.patch
target/linux/layerscape/patches-6.12/701-staging-add-fsl_ppfe-driver.patch
target/linux/mediatek/patches-6.12/330-snand-mtk-bmt-support.patch
target/linux/mediatek/patches-6.12/433-drivers-spi-mem-Add-spi-calibration-hook.patch
target/linux/mediatek/patches-6.12/435-drivers-mtd-spinand-Add-calibration-support-for-spin.patch
target/linux/mediatek/patches-6.12/960-asus-hack-u-boot-ignore-mtdparts.patch
target/linux/pistachio/patches-6.12/401-mtd-nor-support-mtd-name-from-device-tree.patch
target/linux/rockchip/patches-6.12/037-04-v6.19-mmc-sdhci-of-dwcmshc-Add-command-queue-support-for-rockch.patch
target/linux/rockchip/patches-6.12/037-05-v6.19-mmc-sdhci-of-dwcmshc-Fix-command-queue-support-for-RK3576.patch
target/linux/rockchip/patches-6.12/037-06-v6.19-mmc-sdhci-of-dwcmshc-Disable-internal-clock-auto-gate-for.patch
target/linux/rockchip/patches-6.12/037-07-v6.19-mmc-sdhci-of-dwcmshc-reduce-CIT-for-better-performance.patch
target/linux/siflower/patches-6.12/016-spi-spi-mem-allow-gpio-cs-in-spi_mem_exec_op.patch
target/linux/starfive/patches-6.12/1007-reset-starfive-Add-JH7100-audio-reset-driver.patch

index 3fc0ba7dc7c28b89be8e7cada121948d1e63c865..20236571a08490ebcd18481554ca656ac11703e7 100644 (file)
@@ -111,7 +111,7 @@ Signed-off-by: Christian Marangi <[email protected]>
 +
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
-@@ -737,6 +737,13 @@ S:        Maintained
+@@ -745,6 +745,13 @@ S:        Maintained
  F:    Documentation/devicetree/bindings/spi/airoha,en7581-snand.yaml
  F:    drivers/spi/spi-airoha-snfi.c
  
index bf106fa54408b78b2f82ad82cb8614cbcec311c0..844e2b43cf7a625f99558c343d4e9d675e7ea5f8 100644 (file)
@@ -35,7 +35,7 @@ Signed-off-by: Christian Marangi <[email protected]>
 
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
-@@ -742,6 +742,7 @@ M: Christian Marangi <[email protected]
+@@ -750,6 +750,7 @@ M: Christian Marangi <[email protected]
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
  F:    Documentation/devicetree/bindings/phy/airoha,an7581-usb-phy.yaml
index 02566032d472eab5c0721a5229f4547cbfd1a957..540e3bf1c08f5c8e73ecdec86a9e93a21974618e 100644 (file)
@@ -8,7 +8,7 @@
  
  static int spinand_read_reg_op(struct spinand_device *spinand, u8 reg, u8 *val)
  {
-@@ -1575,6 +1576,7 @@ static int spinand_probe(struct spi_mem
+@@ -1577,6 +1578,7 @@ static int spinand_probe(struct spi_mem
        if (ret)
                return ret;
  
@@ -16,7 +16,7 @@
        ret = mtd_device_register(mtd, NULL, 0);
        if (ret)
                goto err_spinand_cleanup;
-@@ -1582,6 +1584,7 @@ static int spinand_probe(struct spi_mem
+@@ -1584,6 +1586,7 @@ static int spinand_probe(struct spi_mem
        return 0;
  
  err_spinand_cleanup:
@@ -24,7 +24,7 @@
        spinand_cleanup(spinand);
  
        return ret;
-@@ -1600,6 +1603,7 @@ static int spinand_remove(struct spi_mem
+@@ -1602,6 +1605,7 @@ static int spinand_remove(struct spi_mem
        if (ret)
                return ret;
  
index c6ce4dd6db957bed55b7cf1038b655d466c54ed2..61b880bb43d6abbf13e464618809e7c0797756b1 100644 (file)
@@ -18626,7 +18626,7 @@ Signed-off-by: j-schambacher <[email protected]>
         * For devices with more than one control interface, we assume the
 --- a/sound/usb/quirks.c
 +++ b/sound/usb/quirks.c
-@@ -2378,6 +2378,8 @@ static const struct usb_audio_quirk_flag
+@@ -2385,6 +2385,8 @@ static const struct usb_audio_quirk_flag
                   QUIRK_FLAG_ALIGN_TRANSFER),
        DEVICE_FLG(0x534d, 0x2109, /* MacroSilicon MS2109 */
                   QUIRK_FLAG_ALIGN_TRANSFER),
index 0491be43696290d9e4c20ebfe06127b2a1befd1d..88c67d2ba524bddca478c45c65ecded8bbbaf5ac 100644 (file)
@@ -124,7 +124,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
   * non-error returns are a promise to giveback() the urb later
   * we drop ownership so next owner (or urb unlink) can get it
   */
-@@ -5386,6 +5489,7 @@ static const struct hc_driver xhci_hc_dr
+@@ -5387,6 +5490,7 @@ static const struct hc_driver xhci_hc_dr
        .endpoint_reset =       xhci_endpoint_reset,
        .check_bandwidth =      xhci_check_bandwidth,
        .reset_bandwidth =      xhci_reset_bandwidth,
index a834c5dcc387ea1708ae7769a3f93425c665f0e5..1b1b8d7746a3f7ebf5c3d8ff162893196f8e5349 100644 (file)
@@ -32,7 +32,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
  #define USB_VENDOR_ID_BELKIN          0x050d
  #define USB_DEVICE_ID_FLIP_KVM                0x3201
  
-@@ -1470,6 +1473,9 @@
+@@ -1471,6 +1474,9 @@
  #define USB_VENDOR_ID_XIAOMI          0x2717
  #define USB_DEVICE_ID_MI_SILENT_MOUSE 0x5014
  
index 9abbcd0bae848478de3d3c5b03dc849e6d277486..b99b85649a546c6097d1ccf69e9ab3a41b61c512 100644 (file)
@@ -75,7 +75,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
        if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
 --- a/drivers/usb/host/xhci-ring.c
 +++ b/drivers/usb/host/xhci-ring.c
-@@ -3661,6 +3661,48 @@ static int xhci_align_td(struct xhci_hcd
+@@ -3666,6 +3666,48 @@ static int xhci_align_td(struct xhci_hcd
        return 1;
  }
  
@@ -124,7 +124,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
  /* This is very similar to what ehci-q.c qtd_fill() does */
  int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
                struct urb *urb, int slot_id, unsigned int ep_index)
-@@ -3815,6 +3857,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
+@@ -3820,6 +3862,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
        }
  
        check_trb_math(urb, enqd_len);
@@ -133,7 +133,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
        giveback_first_trb(xhci, slot_id, ep_index, urb->stream_id,
                        start_cycle, start_trb);
        return 0;
-@@ -3963,6 +4007,8 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
+@@ -3968,6 +4012,8 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
                        /* Event on completion */
                        field | TRB_IOC | TRB_TYPE(TRB_STATUS) | ep_ring->cycle_state);
  
index 7fe2856c9ff1e4447aa8c8f0f5f562d8b5092da9..ef89cdb2176c765138a625f50c0b6cd266533578 100644 (file)
@@ -12,7 +12,7 @@ sdhci: remove PYA0_INTR_BUG quirk. Add quirks to disable some of the higher SDR
 
 --- a/drivers/mmc/host/sdhci-of-dwcmshc.c
 +++ b/drivers/mmc/host/sdhci-of-dwcmshc.c
-@@ -1236,7 +1236,11 @@ static const struct dwcmshc_pltfm_data s
+@@ -1241,7 +1241,11 @@ static const struct dwcmshc_pltfm_data s
                .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN |
                          SDHCI_QUIRK_BROKEN_TIMEOUT_VAL,
                .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
index e60f4e923267852a61eb04acba9688395e995c54..97030141eb3576f695b7ebabe4b017e3775f8c51 100644 (file)
@@ -212,7 +212,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
        },
 --- a/drivers/usb/dwc3/core.c
 +++ b/drivers/usb/dwc3/core.c
-@@ -1319,6 +1319,24 @@ static void dwc3_config_threshold(struct
+@@ -1320,6 +1320,24 @@ static void dwc3_config_threshold(struct
        }
  }
  
@@ -237,7 +237,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
  /**
   * dwc3_core_init - Low-level initialization of DWC3 Core
   * @dwc: Pointer to our controller context structure
-@@ -1386,6 +1404,8 @@ static int dwc3_core_init(struct dwc3 *d
+@@ -1387,6 +1405,8 @@ static int dwc3_core_init(struct dwc3 *d
  
        dwc3_config_soc_bus(dwc);
  
@@ -246,7 +246,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
        ret = dwc3_phy_power_on(dwc);
        if (ret)
                goto err_exit_phy;
-@@ -1490,6 +1510,24 @@ static int dwc3_core_init(struct dwc3 *d
+@@ -1491,6 +1511,24 @@ static int dwc3_core_init(struct dwc3 *d
                dwc3_writel(dwc->regs, DWC3_LLUCTL, reg);
        }
  
@@ -271,7 +271,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
        return 0;
  
  err_power_off_phy:
-@@ -1675,6 +1713,7 @@ static void dwc3_get_properties(struct d
+@@ -1676,6 +1714,7 @@ static void dwc3_get_properties(struct d
        u8                      tx_thr_num_pkt_prd = 0;
        u8                      tx_max_burst_prd = 0;
        u8                      tx_fifo_resize_max_num;
@@ -279,7 +279,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
  
        /* default to highest possible threshold */
        lpm_nyet_threshold = 0xf;
-@@ -1695,6 +1734,9 @@ static void dwc3_get_properties(struct d
+@@ -1696,6 +1735,9 @@ static void dwc3_get_properties(struct d
         */
        tx_fifo_resize_max_num = 6;
  
@@ -289,7 +289,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
        dwc->maximum_speed = usb_get_maximum_speed(dev);
        dwc->max_ssp_rate = usb_get_maximum_ssp_rate(dev);
        dwc->dr_mode = usb_get_dr_mode(dev);
-@@ -1809,6 +1851,9 @@ static void dwc3_get_properties(struct d
+@@ -1810,6 +1852,9 @@ static void dwc3_get_properties(struct d
        dwc->dis_split_quirk = device_property_read_bool(dev,
                                "snps,dis-split-quirk");
  
@@ -299,7 +299,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
        dwc->lpm_nyet_threshold = lpm_nyet_threshold;
        dwc->tx_de_emphasis = tx_de_emphasis;
  
-@@ -1826,6 +1871,8 @@ static void dwc3_get_properties(struct d
+@@ -1827,6 +1872,8 @@ static void dwc3_get_properties(struct d
        dwc->tx_thr_num_pkt_prd = tx_thr_num_pkt_prd;
        dwc->tx_max_burst_prd = tx_max_burst_prd;
  
@@ -308,7 +308,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
        dwc->tx_fifo_resize_max_num = tx_fifo_resize_max_num;
  }
  
-@@ -2184,6 +2231,12 @@ static int dwc3_probe(struct platform_de
+@@ -2185,6 +2232,12 @@ static int dwc3_probe(struct platform_de
        if (IS_ERR(dwc->usb_psy))
                return dev_err_probe(dev, PTR_ERR(dwc->usb_psy), "couldn't get usb power supply\n");
  
index 9cf0c1ad16b91d907ac4f908217239d03fc9339c..ebdb57af0a158308d8fb73862dd3fc80e3c9301f 100644 (file)
@@ -30,8 +30,8 @@ Signed-off-by: Jonathan Bell <[email protected]>
        int vendor_specific_area1; /* P_VENDOR_SPECIFIC_AREA1 reg */
        int vendor_specific_area2; /* P_VENDOR_SPECIFIC_AREA2 reg */
  
-@@ -289,6 +290,17 @@ static void dwcmshc_adma_write_desc(stru
-       sdhci_adma_write_desc(host, desc, addr, len, cmd);
+@@ -302,6 +303,17 @@ static void dwcmshc_reset(struct sdhci_h
+               sdhci_writel(host, SDHCI_INT_RESPONSE, SDHCI_INT_STATUS);
  }
  
 +static void dwcmshc_set_clock(struct sdhci_host *host, unsigned int clock)
@@ -48,7 +48,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
  static unsigned int dwcmshc_get_max_clock(struct sdhci_host *host)
  {
        struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-@@ -1138,10 +1150,11 @@ static int sg2042_init(struct device *de
+@@ -1143,10 +1155,11 @@ static int sg2042_init(struct device *de
  }
  
  static const struct sdhci_ops sdhci_dwcmshc_ops = {
@@ -58,10 +58,10 @@ Signed-off-by: Jonathan Bell <[email protected]>
        .set_uhs_signaling      = dwcmshc_set_uhs_signaling,
        .get_max_clock          = dwcmshc_get_max_clock,
 +      .get_timeout_clock      = sdhci_pltfm_clk_get_timeout_clock,
-       .reset                  = sdhci_reset,
+       .reset                  = dwcmshc_reset,
        .adma_write_desc        = dwcmshc_adma_write_desc,
        .irq                    = dwcmshc_cqe_irq_handler,
-@@ -1214,8 +1227,10 @@ static const struct sdhci_ops sdhci_dwcm
+@@ -1219,8 +1232,10 @@ static const struct sdhci_ops sdhci_dwcm
  static const struct dwcmshc_pltfm_data sdhci_dwcmshc_pdata = {
        .pdata = {
                .ops = &sdhci_dwcmshc_ops,
@@ -74,7 +74,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
        },
  };
  
-@@ -1230,6 +1245,15 @@ static const struct dwcmshc_pltfm_data s
+@@ -1235,6 +1250,15 @@ static const struct dwcmshc_pltfm_data s
  };
  #endif
  
@@ -90,7 +90,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
  static const struct dwcmshc_pltfm_data sdhci_dwcmshc_rk35xx_pdata = {
        .pdata = {
                .ops = &sdhci_dwcmshc_rk35xx_ops,
-@@ -1353,6 +1377,10 @@ dsbl_cqe_caps:
+@@ -1358,6 +1382,10 @@ dsbl_cqe_caps:
  
  static const struct of_device_id sdhci_dwcmshc_dt_ids[] = {
        {
@@ -101,7 +101,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
                .compatible = "rockchip,rk3588-dwcmshc",
                .data = &sdhci_dwcmshc_rk35xx_pdata,
        },
-@@ -1445,13 +1473,32 @@ static int dwcmshc_probe(struct platform
+@@ -1450,13 +1478,32 @@ static int dwcmshc_probe(struct platform
                priv->bus_clk = devm_clk_get(dev, "bus");
                if (!IS_ERR(priv->bus_clk))
                        clk_prepare_enable(priv->bus_clk);
@@ -134,7 +134,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
  
        priv->vendor_specific_area1 =
                sdhci_readl(host, DWCMSHC_P_VENDOR_AREA1) & DWCMSHC_AREA1_MASK;
-@@ -1511,6 +1558,7 @@ err_rpm:
+@@ -1516,6 +1563,7 @@ err_rpm:
        pm_runtime_put_noidle(dev);
  err_clk:
        clk_disable_unprepare(pltfm_host->clk);
index 3d059f253a0d1185118b10aa4bbe12c8f057d025..a563c222b1d8d16945aa954d00ab6ed3ba2a980a 100644 (file)
@@ -19,7 +19,7 @@ Signed-off-by: Dave Stevenson <[email protected]>
 
 --- a/drivers/gpu/drm/drm_fb_helper.c
 +++ b/drivers/gpu/drm/drm_fb_helper.c
-@@ -1803,7 +1803,7 @@ __drm_fb_helper_initial_config_and_unloc
+@@ -1797,7 +1797,7 @@ __drm_fb_helper_initial_config_and_unloc
        struct drm_device *dev = fb_helper->dev;
        struct fb_info *info;
        unsigned int width, height;
@@ -28,7 +28,7 @@ Signed-off-by: Dave Stevenson <[email protected]>
  
        width = dev->mode_config.max_width;
        height = dev->mode_config.max_height;
-@@ -1831,6 +1831,15 @@ __drm_fb_helper_initial_config_and_unloc
+@@ -1825,6 +1825,15 @@ __drm_fb_helper_initial_config_and_unloc
         * register the fbdev emulation instance in kernel_fb_helper_list. */
        mutex_unlock(&fb_helper->lock);
  
index 80046cc19548548dc6a71e100a48a11c3501a367..f8e80fc4d0bcff6f209942c23593102987387184 100644 (file)
@@ -16,7 +16,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
 
 --- a/drivers/usb/dwc3/core.c
 +++ b/drivers/usb/dwc3/core.c
-@@ -1485,6 +1485,9 @@ static int dwc3_core_init(struct dwc3 *d
+@@ -1486,6 +1486,9 @@ static int dwc3_core_init(struct dwc3 *d
                if (dwc->parkmode_disable_hs_quirk)
                        reg |= DWC3_GUCTL1_PARKMODE_DISABLE_HS;
  
@@ -26,7 +26,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
                if (DWC3_VER_IS_WITHIN(DWC3, 290A, ANY)) {
                        if (dwc->maximum_speed == USB_SPEED_FULL ||
                            dwc->maximum_speed == USB_SPEED_HIGH)
-@@ -1831,6 +1834,8 @@ static void dwc3_get_properties(struct d
+@@ -1832,6 +1835,8 @@ static void dwc3_get_properties(struct d
                                "snps,parkmode-disable-ss-quirk");
        dwc->parkmode_disable_hs_quirk = device_property_read_bool(dev,
                                "snps,parkmode-disable-hs-quirk");
index 666c391c4f6e81ea642f8af8b0ff34dcd4d6220f..92cb7e948156e919c732dc5ad018c1e75cee913c 100644 (file)
@@ -22,7 +22,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
 
 --- a/drivers/usb/dwc3/core.c
 +++ b/drivers/usb/dwc3/core.c
-@@ -1479,6 +1479,12 @@ static int dwc3_core_init(struct dwc3 *d
+@@ -1480,6 +1480,12 @@ static int dwc3_core_init(struct dwc3 *d
                if (dwc->dis_tx_ipgap_linecheck_quirk)
                        reg |= DWC3_GUCTL1_TX_IPGAP_LINECHECK_DIS;
  
@@ -35,7 +35,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
                if (dwc->parkmode_disable_ss_quirk)
                        reg |= DWC3_GUCTL1_PARKMODE_DISABLE_SS;
  
-@@ -1830,6 +1836,10 @@ static void dwc3_get_properties(struct d
+@@ -1831,6 +1837,10 @@ static void dwc3_get_properties(struct d
                                "snps,resume-hs-terminations");
        dwc->ulpi_ext_vbus_drv = device_property_read_bool(dev,
                                "snps,ulpi-ext-vbus-drv");
index 809ab256f4bab83647e1a3e31573e9d03eb84798..727815eb9fdf7c665d18e55390727ab14c765843 100644 (file)
@@ -19,7 +19,7 @@ Signed-off-by: Phil Elwell <[email protected]>
 
 --- a/drivers/mmc/host/sdhci-of-dwcmshc.c
 +++ b/drivers/mmc/host/sdhci-of-dwcmshc.c
-@@ -1245,13 +1245,15 @@ static const struct dwcmshc_pltfm_data s
+@@ -1250,13 +1250,15 @@ static const struct dwcmshc_pltfm_data s
  };
  #endif
  
index 33f8ca71adb81c63f5f485ae7601720b1619fa5d..cdd429ba0130a22ee5cf1e000fb4ba56e34c3122 100644 (file)
@@ -40,7 +40,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
  static bool td_on_ring(struct xhci_td *td, struct xhci_ring *ring)
  {
        struct xhci_segment *seg;
-@@ -4791,7 +4795,7 @@ static u16 xhci_calculate_u1_timeout(str
+@@ -4792,7 +4796,7 @@ static u16 xhci_calculate_u1_timeout(str
                }
        }
  
@@ -49,7 +49,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
                timeout_ns = xhci_calculate_intel_u1_timeout(udev, desc);
        else
                timeout_ns = udev->u1_params.sel;
-@@ -4855,7 +4859,7 @@ static u16 xhci_calculate_u2_timeout(str
+@@ -4856,7 +4860,7 @@ static u16 xhci_calculate_u2_timeout(str
                }
        }
  
index 4b6f2d9e4ff9060dc6deb305e01d14f2130ed1d8..67c7c9ba6aed126ebd3ea8b11463aff7c62d6bb5 100644 (file)
@@ -29,7 +29,7 @@ Signed-off-by: Caleb James DeLisle <[email protected]>
  {
 --- a/drivers/mtd/nand/mtk_bmt.c
 +++ b/drivers/mtd/nand/mtk_bmt.c
-@@ -422,6 +422,8 @@ int mtk_bmt_attach(struct mtd_info *mtd)
+@@ -421,6 +421,8 @@ int mtk_bmt_attach(struct mtd_info *mtd)
                bmtd.ops = &mtk_bmt_nmbm_ops;
        else if (of_property_read_bool(np, "mediatek,bbt"))
                bmtd.ops = &mtk_bmt_bbt_ops;
index 02566032d472eab5c0721a5229f4547cbfd1a957..540e3bf1c08f5c8e73ecdec86a9e93a21974618e 100644 (file)
@@ -8,7 +8,7 @@
  
  static int spinand_read_reg_op(struct spinand_device *spinand, u8 reg, u8 *val)
  {
-@@ -1575,6 +1576,7 @@ static int spinand_probe(struct spi_mem
+@@ -1577,6 +1578,7 @@ static int spinand_probe(struct spi_mem
        if (ret)
                return ret;
  
@@ -16,7 +16,7 @@
        ret = mtd_device_register(mtd, NULL, 0);
        if (ret)
                goto err_spinand_cleanup;
-@@ -1582,6 +1584,7 @@ static int spinand_probe(struct spi_mem
+@@ -1584,6 +1586,7 @@ static int spinand_probe(struct spi_mem
        return 0;
  
  err_spinand_cleanup:
@@ -24,7 +24,7 @@
        spinand_cleanup(spinand);
  
        return ret;
-@@ -1600,6 +1603,7 @@ static int spinand_remove(struct spi_mem
+@@ -1602,6 +1605,7 @@ static int spinand_remove(struct spi_mem
        if (ret)
                return ret;
  
diff --git a/target/linux/generic/backport-6.12/830-v6.18-spi-bcm63xx-fix-premature-CS-deassertion-on-RX-only-transactions.patch b/target/linux/generic/backport-6.12/830-v6.18-spi-bcm63xx-fix-premature-CS-deassertion-on-RX-only-transactions.patch
deleted file mode 100644 (file)
index 6a8889e..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-From fd9862f726aedbc2f29a29916cabed7bcf5cadb6 Mon Sep 17 00:00:00 2001
-From: Hang Zhou <[email protected]>
-Date: Mon, 17 Nov 2025 01:08:35 +1100
-Subject: [PATCH] spi: bcm63xx: fix premature CS deassertion on RX-only
- transactions
-
-On BCM6358 (and also observed on BCM6368) the controller appears to
-only generate as many SPI clocks as bytes that have been written into
-the TX FIFO. For RX-only transfers the driver programs the transfer
-length in SPI_MSG_CTL but does not write anything into the FIFO, so
-chip select is deasserted early and the RX transfer segment is never
-fully clocked in.
-
-A concrete failing case is a three-transfer MAC address read from
-SPI-NOR:
-  - TX 0x03 (read command)
-  - TX 3-byte address
-  - RX 6 bytes (MAC)
-
-In contrast, a two-transfer JEDEC-ID read (0x9f + 6-byte RX) works
-because the driver uses prepend_len and writes dummy bytes into the
-TX FIFO for the RX part.
-
-Fix this by writing 0xff dummy bytes into the TX FIFO for RX-only
-segments so that the number of bytes written to the FIFO matches the
-total message length seen by the controller.
-
-Fixes: b17de076062a ("spi/bcm63xx: work around inability to keep CS up")
-
-Signed-off-by: Hang Zhou <[email protected]>
-Link: https://patch.msgid.link/[email protected]
-Signed-off-by: Mark Brown <[email protected]>
----
- drivers/spi/spi-bcm63xx.c | 14 ++++++++++++++
- 1 file changed, 14 insertions(+)
-
---- a/drivers/spi/spi-bcm63xx.c
-+++ b/drivers/spi/spi-bcm63xx.c
-@@ -247,6 +247,20 @@ static int bcm63xx_txrx_bufs(struct spi_
-               if (t->rx_buf) {
-                       do_rx = true;
-+
-+                      /*
-+                       * In certain hardware implementations, there appears to be a
-+                       * hidden accumulator that tracks the number of bytes written into
-+                       * the hardware FIFO, and this accumulator overrides the length in
-+                       * the SPI_MSG_CTL register.
-+                       *
-+                       * Therefore, for read-only transfers, we need to write some dummy
-+                       * value into the FIFO to keep the accumulator tracking the correct
-+                       * length.
-+                       */
-+                      if (!t->tx_buf)
-+                              memset_io(bs->tx_io + len, 0xFF, t->len);
-+
-                       /* prepend is half-duplex write only */
-                       if (t == first)
-                               prepend_len = 0;
index 73c2f33a104fc9f742cb9a9091fb8387f57221d1..0a9808b6bec272d4509ce42d88b38d037007f970 100644 (file)
@@ -1,2 +1,2 @@
-LINUX_VERSION-6.12 = .60
-LINUX_KERNEL_HASH-6.12.60 = a63096b2147411d683cecbf87622bb2ff4885bac2b3641d3d4f10250c89cdcf8
+LINUX_VERSION-6.12 = .62
+LINUX_KERNEL_HASH-6.12.62 = 13e2c685ac8fab5dd992dd105732554dae514aef350c2a8c7418e7b74eb62c13
index c3d246c5eea5f76471863c62a8d9f09745b713e2..21615160a94ca6b7995ec5846a1a8bb17758bccd 100644 (file)
@@ -36,7 +36,7 @@ Signed-off-by: Daniel Golle <[email protected]>
 
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
-@@ -23668,6 +23668,12 @@ F:    Documentation/filesystems/ubifs-authe
+@@ -23663,6 +23663,12 @@ F:    Documentation/filesystems/ubifs-authe
  F:    Documentation/filesystems/ubifs.rst
  F:    fs/ubifs/
  
index 04efc152702217724b1bdd6b277fd99d80ab4d53..44797dc7bfd09d0a5c9a4a7792463e84c5e5d553 100644 (file)
@@ -962,7 +962,7 @@ Signed-off-by: Dong Aisheng <[email protected]>
  L:    [email protected]
 --- a/drivers/staging/Kconfig
 +++ b/drivers/staging/Kconfig
-@@ -64,4 +64,6 @@ source "drivers/staging/fieldbus/Kconfig
+@@ -62,4 +62,6 @@ source "drivers/staging/fieldbus/Kconfig
  
  source "drivers/staging/vme_user/Kconfig"
  
@@ -971,7 +971,7 @@ Signed-off-by: Dong Aisheng <[email protected]>
  endif # STAGING
 --- a/drivers/staging/Makefile
 +++ b/drivers/staging/Makefile
-@@ -21,3 +21,4 @@ obj-$(CONFIG_GREYBUS)                += greybus/
+@@ -20,3 +20,4 @@ obj-$(CONFIG_GREYBUS)                += greybus/
  obj-$(CONFIG_BCM2835_VCHIQ)   += vc04_services/
  obj-$(CONFIG_XIL_AXIS_FIFO)   += axis-fifo/
  obj-$(CONFIG_FIELDBUS_DEV)     += fieldbus/
index 02566032d472eab5c0721a5229f4547cbfd1a957..540e3bf1c08f5c8e73ecdec86a9e93a21974618e 100644 (file)
@@ -8,7 +8,7 @@
  
  static int spinand_read_reg_op(struct spinand_device *spinand, u8 reg, u8 *val)
  {
-@@ -1575,6 +1576,7 @@ static int spinand_probe(struct spi_mem
+@@ -1577,6 +1578,7 @@ static int spinand_probe(struct spi_mem
        if (ret)
                return ret;
  
@@ -16,7 +16,7 @@
        ret = mtd_device_register(mtd, NULL, 0);
        if (ret)
                goto err_spinand_cleanup;
-@@ -1582,6 +1584,7 @@ static int spinand_probe(struct spi_mem
+@@ -1584,6 +1586,7 @@ static int spinand_probe(struct spi_mem
        return 0;
  
  err_spinand_cleanup:
@@ -24,7 +24,7 @@
        spinand_cleanup(spinand);
  
        return ret;
-@@ -1600,6 +1603,7 @@ static int spinand_remove(struct spi_mem
+@@ -1602,6 +1605,7 @@ static int spinand_remove(struct spi_mem
        if (ret)
                return ret;
  
index e8377f5c4cbc728ce24175197ba14c4371a13565..731d91129607b4bac70b2817c5111fa9a1ff3277 100644 (file)
@@ -11,7 +11,7 @@ Signed-off-by: SkyLake.Huang <[email protected]>
 
 --- a/drivers/spi/spi-mem.c
 +++ b/drivers/spi/spi-mem.c
-@@ -466,6 +466,14 @@ int spi_mem_exec_op(struct spi_mem *mem,
+@@ -486,6 +486,14 @@ int spi_mem_exec_op(struct spi_mem *mem,
  }
  EXPORT_SYMBOL_GPL(spi_mem_exec_op);
  
@@ -28,7 +28,7 @@ Signed-off-by: SkyLake.Huang <[email protected]>
   *                    upper layer if necessary
 --- a/include/linux/spi/spi-mem.h
 +++ b/include/linux/spi/spi-mem.h
-@@ -372,6 +372,10 @@ bool spi_mem_supports_op(struct spi_mem
+@@ -390,6 +390,10 @@ bool spi_mem_supports_op(struct spi_mem
  int spi_mem_exec_op(struct spi_mem *mem,
                    const struct spi_mem_op *op);
  
index c33931ebc7fcbb0d8f247d630ddde1635981b316..64c059c1f218f6d2dc7e15ea0e5b80d82dc3c92d 100644 (file)
@@ -68,7 +68,7 @@ Signed-off-by: SkyLake.Huang <[email protected]>
  static int spinand_id_detect(struct spinand_device *spinand)
  {
        u8 *id = spinand->id.data;
-@@ -1452,6 +1502,10 @@ static int spinand_init(struct spinand_d
+@@ -1454,6 +1504,10 @@ static int spinand_init(struct spinand_d
        if (!spinand->scratchbuf)
                return -ENOMEM;
  
index 70ff4dd5b61c3797e5567d1e0ce56ee9f406c387..4f50d32aa22455e15947eb973935486390914dc0 100644 (file)
@@ -29,7 +29,7 @@ Signed-off-by: Daniel Golle <[email protected]>
 
 --- a/drivers/mtd/nand/spi/core.c
 +++ b/drivers/mtd/nand/spi/core.c
-@@ -1669,6 +1669,7 @@ static int spinand_remove(struct spi_mem
+@@ -1671,6 +1671,7 @@ static int spinand_remove(struct spi_mem
  
  static const struct spi_device_id spinand_ids[] = {
        { .name = "spi-nand" },
@@ -37,7 +37,7 @@ Signed-off-by: Daniel Golle <[email protected]>
        { /* sentinel */ },
  };
  MODULE_DEVICE_TABLE(spi, spinand_ids);
-@@ -1676,6 +1677,7 @@ MODULE_DEVICE_TABLE(spi, spinand_ids);
+@@ -1678,6 +1679,7 @@ MODULE_DEVICE_TABLE(spi, spinand_ids);
  #ifdef CONFIG_OF
  static const struct of_device_id spinand_of_ids[] = {
        { .compatible = "spi-nand" },
index af773a64ebad6433c553f401dc3376be43aec123..99a942e0775235f215b88b5ebc9bf272a6dced2f 100644 (file)
@@ -10,7 +10,7 @@ Signed-off-by: Abhimanyu Vishwakarma <[email protected]>
 
 --- a/drivers/spi/spi-mem.c
 +++ b/drivers/spi/spi-mem.c
-@@ -893,7 +893,9 @@ static int spi_mem_probe(struct spi_devi
+@@ -930,7 +930,9 @@ static int spi_mem_probe(struct spi_devi
  {
        struct spi_mem_driver *memdrv = to_spi_mem_drv(spi->dev.driver);
        struct spi_controller *ctlr = spi->controller;
@@ -20,7 +20,7 @@ Signed-off-by: Abhimanyu Vishwakarma <[email protected]>
  
        mem = devm_kzalloc(&spi->dev, sizeof(*mem), GFP_KERNEL);
        if (!mem)
-@@ -901,10 +903,15 @@ static int spi_mem_probe(struct spi_devi
+@@ -938,10 +940,15 @@ static int spi_mem_probe(struct spi_devi
  
        mem->spi = spi;
  
index e7b1c466c1ead27e62d6be68c57a33030821b9ac..74e5a8e20b74a8c1d7facdaec8820db9b56f4963 100644 (file)
@@ -48,7 +48,7 @@ Signed-off-by: Ulf Hansson <[email protected]>
        int (*init)(struct device *dev, struct sdhci_host *host, struct dwcmshc_priv *dwc_priv);
        void (*postinit)(struct sdhci_host *host, struct dwcmshc_priv *dwc_priv);
  };
-@@ -603,6 +607,68 @@ static void dwcmshc_cqhci_dumpregs(struc
+@@ -616,6 +620,68 @@ static void dwcmshc_cqhci_dumpregs(struc
        sdhci_dumpregs(mmc_priv(mmc));
  }
  
@@ -117,7 +117,7 @@ Signed-off-by: Ulf Hansson <[email protected]>
  static void dwcmshc_rk3568_set_clock(struct sdhci_host *host, unsigned int clock)
  {
        struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-@@ -721,6 +787,10 @@ static void rk35xx_sdhci_reset(struct sd
+@@ -734,6 +800,10 @@ static void rk35xx_sdhci_reset(struct sd
        struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
        struct dwcmshc_priv *dwc_priv = sdhci_pltfm_priv(pltfm_host);
        struct rk35xx_priv *priv = dwc_priv->priv;
@@ -128,7 +128,7 @@ Signed-off-by: Ulf Hansson <[email protected]>
  
        if (mask & SDHCI_RESET_ALL && priv->reset) {
                reset_control_assert(priv->reset);
-@@ -729,6 +799,9 @@ static void rk35xx_sdhci_reset(struct sd
+@@ -742,6 +812,9 @@ static void rk35xx_sdhci_reset(struct sd
        }
  
        sdhci_reset(host, mask);
@@ -138,7 +138,7 @@ Signed-off-by: Ulf Hansson <[email protected]>
  }
  
  static int dwcmshc_rk35xx_init(struct device *dev, struct sdhci_host *host,
-@@ -1230,6 +1303,15 @@ static const struct dwcmshc_pltfm_data s
+@@ -1235,6 +1308,15 @@ static const struct dwcmshc_pltfm_data s
  };
  #endif
  
@@ -154,7 +154,7 @@ Signed-off-by: Ulf Hansson <[email protected]>
  static const struct dwcmshc_pltfm_data sdhci_dwcmshc_rk35xx_pdata = {
        .pdata = {
                .ops = &sdhci_dwcmshc_rk35xx_ops,
-@@ -1238,6 +1320,7 @@ static const struct dwcmshc_pltfm_data s
+@@ -1243,6 +1325,7 @@ static const struct dwcmshc_pltfm_data s
                .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
                           SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN,
        },
@@ -162,7 +162,7 @@ Signed-off-by: Ulf Hansson <[email protected]>
        .init = dwcmshc_rk35xx_init,
        .postinit = dwcmshc_rk35xx_postinit,
  };
-@@ -1287,7 +1370,8 @@ static const struct cqhci_host_ops dwcms
+@@ -1292,7 +1375,8 @@ static const struct cqhci_host_ops dwcms
        .set_tran_desc  = dwcmshc_set_tran_desc,
  };
  
@@ -172,7 +172,7 @@ Signed-off-by: Ulf Hansson <[email protected]>
  {
        struct cqhci_host *cq_host;
        struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-@@ -1317,7 +1401,10 @@ static void dwcmshc_cqhci_init(struct sd
+@@ -1322,7 +1406,10 @@ static void dwcmshc_cqhci_init(struct sd
        }
  
        cq_host->mmio = host->ioaddr + priv->vendor_specific_area2;
@@ -184,7 +184,7 @@ Signed-off-by: Ulf Hansson <[email protected]>
  
        /* Enable using of 128-bit task descriptors */
        dma64 = host->flags & SDHCI_USE_64_BIT_DMA;
-@@ -1486,7 +1573,7 @@ static int dwcmshc_probe(struct platform
+@@ -1491,7 +1578,7 @@ static int dwcmshc_probe(struct platform
                priv->vendor_specific_area2 =
                        sdhci_readw(host, DWCMSHC_P_VENDOR_AREA2);
  
index c4d96895074f461a9051231de907da1a229a0b46..3dd29ffefbc1f5cc44693be29a062a8cfbd3b16b 100644 (file)
@@ -45,7 +45,7 @@ Signed-off-by: Ulf Hansson <[email protected]>
 
 --- a/drivers/mmc/host/sdhci-of-dwcmshc.c
 +++ b/drivers/mmc/host/sdhci-of-dwcmshc.c
-@@ -1333,6 +1333,7 @@ static const struct dwcmshc_pltfm_data s
+@@ -1338,6 +1338,7 @@ static const struct dwcmshc_pltfm_data s
                .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
                           SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN,
        },
index d8a0ed8d14f94c9558cb6c83175766cb6d4e7a63..45db5c1175c3ce9207d80d919402727a16db2ea6 100644 (file)
@@ -27,7 +27,7 @@ Signed-off-by: Ulf Hansson <[email protected]>
 
 --- a/drivers/mmc/host/sdhci-of-dwcmshc.c
 +++ b/drivers/mmc/host/sdhci-of-dwcmshc.c
-@@ -696,10 +696,11 @@ static void dwcmshc_rk3568_set_clock(str
+@@ -709,10 +709,11 @@ static void dwcmshc_rk3568_set_clock(str
  
        sdhci_set_clock(host, clock);
  
index 90647d96c35637571c7b6aca9cb6aaeeee6fe057..55833022ac29cc8c2fabab2ab802de656d138a6d 100644 (file)
@@ -30,7 +30,7 @@ Signed-off-by: Ulf Hansson <[email protected]>
  #define CQHCI_SSC2                    0x44
 --- a/drivers/mmc/host/sdhci-of-dwcmshc.c
 +++ b/drivers/mmc/host/sdhci-of-dwcmshc.c
-@@ -614,6 +614,11 @@ static void rk35xx_sdhci_cqe_pre_enable(
+@@ -627,6 +627,11 @@ static void rk35xx_sdhci_cqe_pre_enable(
        struct dwcmshc_priv *dwc_priv = sdhci_pltfm_priv(pltfm_host);
        u32 reg;
  
index f37f9c8d3ae5bfad5cb763b44afa28beae8ab952..1aabc0afce42f5655b9b12ea756a771eed356849 100644 (file)
@@ -18,7 +18,7 @@ Signed-off-by: Chuanhong Guo <[email protected]>
 
 --- a/drivers/spi/spi-mem.c
 +++ b/drivers/spi/spi-mem.c
-@@ -368,13 +368,19 @@ int spi_mem_exec_op(struct spi_mem *mem,
+@@ -384,13 +384,19 @@ int spi_mem_exec_op(struct spi_mem *mem,
        if (!spi_mem_internal_supports_op(mem, op))
                return -EOPNOTSUPP;
  
index f5d71ff66feb3057a973922c6b01971b9f5bcc7f..bf4362f923d31dcb02829700912972a3c43ddeb4 100644 (file)
@@ -20,7 +20,7 @@ Signed-off-by: Emil Renner Berthing <[email protected]>
 
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
-@@ -22070,7 +22070,7 @@ STARFIVE JH71X0 RESET CONTROLLER DRIVERS
+@@ -22065,7 +22065,7 @@ STARFIVE JH71X0 RESET CONTROLLER DRIVERS
  M:    Emil Renner Berthing <[email protected]>
  M:    Hal Feng <[email protected]>
  S:    Maintained